package IT.DataAccess;

import IT.Entities.Proyecto;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import java.util.logging.Level;
import java.util.logging.Logger;


public class DatProyecto implements IDatProyecto{
    private Proyecto oProyecto;
    private List<Proyecto> oLista;
    private BDConexion oBase;
    
    private Connection oConexion;
    private CallableStatement oCst;    
    private ResultSet oRst;    
    
    public List<Proyecto> Listar(String cProyecto,String cCliente,int nEstado,
                                 boolean bFecha,Date dFInicio,Date dFFin,int nEmpleado) {
        
       oLista=new ArrayList<Proyecto>();
         
        try {
            oBase = new BDConexion();
            oConexion = oBase.getDataSource().getConnection();
            oBase = null;
            oCst = oConexion.prepareCall("{call usp_ProyectoListar(?,?,?, ?,?,?, ?)}");
            oCst.setString(1, cProyecto);
            oCst.setString(2, cCliente);
            oCst.setInt(3, nEstado);
            oCst.setBoolean(4, bFecha);
            oCst.setDate(5, dFInicio);
            oCst.setDate(6, dFFin);
            oCst.setInt(7, nEmpleado);
            oRst = oCst.executeQuery();

            while (oRst.next()) {
                oLista.add(new Proyecto(oRst.getInt("cod_proy_in"), oRst.getString("nom_proy_vc"),
                        oRst.getDate("fec_crea_dt"),  oRst.getString("fec_crea_vc"), 
                        oRst.getDate("fec_ini_dt"), oRst.getString("fec_ini_vc"), 
                        oRst.getDate("fec_fin_dt"), oRst.getString("fec_fin_vc"), 
                        oRst.getString("obs_proy_vc"), 
                        oRst.getInt("est_proy_in"), oRst.getString("Estado"), 
                        oRst.getInt("tip_per_in"),  oRst.getString("tip_per_vc"), 
                        oRst.getInt("cod_cli_in"), 
                        oRst.getInt("cod_pro_in"), 
                        oRst.getString("Cliente"),
                        oRst.getInt("cod_emp_in"), oRst.getString("Empleado"), 
                        oRst.getInt("cod_plaproy_in"),
                        oRst.getInt("Etapa"),oRst.getInt("Actividad"),
                        oRst.getString("nom_plaproy_vc"),
                        oRst.getString("cod_proy_vc")
                        ));
            }
            oRst.close();
            oCst.close();
            oConexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(DatProyecto.class.getName()).log(Level.SEVERE, null, ex);
        }
       
       return oLista;
    }

    public Proyecto Ind(int nCodigo) {
        oProyecto=new Proyecto();
         
        try {
            oBase = new BDConexion();
            oConexion = oBase.getDataSource().getConnection();
            oBase = null;
            oCst = oConexion.prepareCall("{call usp_ProyectoInd(?)}");
            oCst.setInt(1, nCodigo);
            oRst = oCst.executeQuery();

            while (oRst.next()) {
                oProyecto.setCod_proy_in(oRst.getInt("cod_proy_in"));
                oProyecto.setNom_proy_vc(oRst.getString("nom_proy_vc"));
                oProyecto.setFec_crea_dt(oRst.getDate("fec_crea_dt"));
                oProyecto.setFec_crea_vc(oRst.getString("fec_crea_vc"));
                oProyecto.setFec_fin_dt(oRst.getDate("fec_ini_dt"));
                oProyecto.setFec_ini_vc(oRst.getString("fec_ini_vc"));
                oProyecto.setFec_fin_dt(oRst.getDate("fec_fin_dt"));
                oProyecto.setFec_fin_vc(oRst.getString("fec_fin_vc"));
                oProyecto.setObs_proy_vc(oRst.getString("obs_proy_vc"));
                oProyecto.setEst_proy_in(oRst.getInt("est_proy_in"));
                oProyecto.setEstado(oRst.getString("Estado"));
                
                oProyecto.setTip_per_in(oRst.getInt("tip_per_in"));
                oProyecto.setTip_per_vc(oRst.getString("tip_per_vc"));
                
                oProyecto.setCod_cli_in(oRst.getInt("cod_cli_in"));
                oProyecto.setCod_pro_in(oRst.getInt("cod_pro_in"));
                
                oProyecto.setCliente(oRst.getString("Cliente"));
                oProyecto.setCod_emp_in(oRst.getInt("cod_emp_in"));
                oProyecto.setEmpleado(oRst.getString("Empleado"));
                oProyecto.setCod_plaproy_in(oRst.getInt("cod_plaproy_in"));
                oProyecto.setEtapa(oRst.getInt("Etapa"));
                oProyecto.setActividad(oRst.getInt("Actividad"));
                oProyecto.setNom_plaproy_vc(oRst.getString("nom_plaproy_vc"));     
                oProyecto.setCod_proy_vc(oRst.getString("cod_proy_vc"));
            }
            oRst.close();
            oCst.close();
            oConexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(DatProyecto.class.getName()).log(Level.SEVERE, null, ex);
        }
       
       return oProyecto;
    }

    public List<Proyecto> Ubi(int nEmpleado) {
        oLista=new ArrayList<Proyecto>();
         
        try {
            oBase = new BDConexion();
            oConexion = oBase.getDataSource().getConnection();
            oBase = null;
            oCst = oConexion.prepareCall("{call usp_ProyectoUbi(?)}");
            oCst.setInt(1, nEmpleado);
            oRst = oCst.executeQuery();

            while (oRst.next()) {
                   oLista.add(new Proyecto(oRst.getInt("cod_proy_in"), oRst.getString("nom_proy_vc"),
                        oRst.getDate("fec_crea_dt"),  oRst.getString("fec_crea_vc"), 
                        oRst.getDate("fec_ini_dt"), oRst.getString("fec_ini_vc"), 
                        oRst.getDate("fec_fin_dt"), oRst.getString("fec_fin_vc"), 
                        oRst.getString("obs_proy_vc"), 
                        oRst.getInt("est_proy_in"), oRst.getString("Estado"), 
                        oRst.getInt("tip_per_in"),  oRst.getString("tip_per_vc"), 
                        oRst.getInt("cod_cli_in"), 
                        oRst.getInt("cod_pro_in"), 
                        oRst.getString("Cliente"),
                        oRst.getInt("cod_emp_in"), oRst.getString("Empleado"), 
                        oRst.getInt("cod_plaproy_in"),
                        oRst.getInt("Etapa"),oRst.getInt("Actividad"),
                        oRst.getString("nom_plaproy_vc"),
                        oRst.getString("cod_proy_vc")));
            }
            oRst.close();
            oCst.close();
            oConexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(DatProyecto.class.getName()).log(Level.SEVERE, null, ex);
        }
       
       return oLista;
    }

    public int Insertar(Proyecto ent) {
       int nCodigo=0;
       try {
            oBase = new BDConexion();
            oConexion = oBase.getDataSource().getConnection();
            oBase = null;
            oCst = oConexion.prepareCall("{call usp_ProyectoInsertar(?,?,?, ?,?,?, ?,?,?, ?)}");     
           
            oCst.registerOutParameter(1, java.sql.Types.INTEGER);  
            oCst.setString(2, ent.getNom_proy_vc());
            oCst.setDate(3, ent.getFec_ini_dt());        
            oCst.setString(4, ent.getObs_proy_vc());
            oCst.setInt(5, ent.getEst_proy_in());
            oCst.setInt(6, ent.getCod_cli_in());
            oCst.setInt(7, ent.getCod_emp_in());            
            oCst.setInt(8, ent.getCod_plaproy_in());
            
            oCst.setInt(9, ent.getCod_pro_in());
            oCst.setInt(10, ent.getTip_per_in());
            
            
            oCst.execute();
            nCodigo=oCst.getInt(1);
            oCst.close();
            oConexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(DatProyecto.class.getName()).log(Level.SEVERE, null, ex);
        }
       return nCodigo;
    }

    public void Editar(Proyecto ent) {
          try {
            oBase = new BDConexion();
            oConexion = oBase.getDataSource().getConnection();
            oBase = null;
            oCst = oConexion.prepareCall("{call usp_EmpleadoInsertar(?,?,?,?,?,?,?,?,?)}");                 
            oCst.registerOutParameter(1, java.sql.Types.INTEGER);  
            oCst.setString(2, ent.getNom_proy_vc());
            oCst.setString(3, ent.getObs_proy_vc());

                    
            oCst.execute();
           
            oCst.close();
            oConexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(DatProyecto.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void Estado(int nCodigo,Date dFecha, int nEstado) {
         try {
            oBase = new BDConexion();
            oConexion = oBase.getDataSource().getConnection();
            oBase = null;
            oCst = oConexion.prepareCall("{call usp_ProyectoEstado(?,?,?)}");    
            oCst.setInt(1, nCodigo);
            oCst.setDate(2, dFecha);
            oCst.setInt(3, nEstado);
                    
            oCst.execute();
           
            oCst.close();
            oConexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(DatProyecto.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void Eliminar(int nCodigo) {
        try {
            oBase = new BDConexion();
            oConexion = oBase.getDataSource().getConnection();
            oBase = null;
            oCst = oConexion.prepareCall("{call usp_EmpleadoInsertar(?,?,?,?,?,?,?,?,?)}");    
            oCst.setInt(1, nCodigo);                                
            oCst.execute();           
            oCst.close();
            oConexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(DatProyecto.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public String GenerarCodigo(int nCodigo) {
        String cCodigo="";
        try {
            oBase = new BDConexion();
            oConexion = oBase.getDataSource().getConnection();
            oBase = null;
            oCst = oConexion.prepareCall("{call usp_ProyectoGenerarCodigo(?,?)}");     
           
            oCst.setInt(1,nCodigo);
            oCst.registerOutParameter(2, java.sql.Types.VARCHAR);
            
            oCst.execute();
            cCodigo=oCst.getString(2);
            oCst.close();
            oConexion.close();
        } catch (SQLException ex) {
            Logger.getLogger(DatProyecto.class.getName()).log(Level.SEVERE, null, ex);
        }
        return cCodigo;
    }

}
